#include<signal.h>
#include<iostream>
#include <sys/types.h>
#include <unistd.h>

void printsigset(sigset_t *set)
{
    for(int i=31;i>=0;i--)
    {
        if(sigismember(set,i))
        {
            std::cout<<"1";
        }
        else
        {
            std::cout<<"0";
        }
    }
    std::cout<<std::endl;
}
void handler(int signo)
{
     std::cout << "get a sig: " << signo << std::endl;
    while(true)
    {
        sigset_t pending;
        sigpending(&pending);
        printsigset(&pending);
        sleep(2);
    }
        

}
int main()
{
    // sigset_t set,oset;
    // sigemptyset(&set);
    // sigemptyset(&oset);
    // sigaddset(&set,SIGINT);//屏蔽2号信号
    // sigaddset(&set,3);//屏蔽3号信号
    // sigaddset(&set,4);//屏蔽4号信号
    // sigaddset(&set,5);//屏蔽5号信号
    // sigprocmask(SIG_BLOCK,&set,&oset);
    
    struct sigaction act, oact;
    act.sa_handler=handler;
    sigemptyset(&act.sa_mask);
    sigaddset(&act.sa_mask,3);

    sigaction(2,&act,&oact);

    std::cout<<"pid"<<getpid()<<std::endl;

    while(true)
    {
        sigset_t pending;
        sigpending(&pending);
        printsigset(&pending);
        sleep(1);
        
    }
    return 0;
}
